home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / amigaiffparse.mod (.txt) < prev    next >
Oberon Text  |  1996-06-02  |  8KB  |  219 lines

  1. Syntax20b.Scn.Fnt
  2. ParcElems
  3. Alloc
  4. Syntax24b.Scn.Fnt
  5. Syntax10.Scn.Fnt
  6. Syntax10b.Scn.Fnt
  7. FoldElems
  8. (* AMIGA *)
  9. MODULE AmigaIFFParse; (* Ralf Degner 25.07.1995, OJ 30 Apr 96  *)
  10. IMPORT
  11.     SYSTEM, E:=AmigaExec;
  12.     iffparseBase- : E.LibraryPtr;
  13.     iffparseVersion- : INTEGER;
  14.     termEntry : E.TermEntry;
  15. CONST
  16.     iffparseName*="iffparse.library";
  17.     read*= {}; write*= {0}; rwBits*= read+write; fSeek*= {1}; rSeek*= {2};
  18.     parseScan*= 0; parseStep*= 1; parseRawStep*= 2;
  19.     sizeUnknown*= -1;
  20.     IFFHandlePtr*= POINTER TO IFFHandle;
  21.     IFFHandle*= RECORD
  22.         stream*: LONGINT;
  23.         flgas*: SET;
  24.         depth*: LONGINT
  25.     END;
  26.     ContextNodePtr*= POINTER TO ContextNode;
  27.     ContextNode*= RECORD(E.MinNode)
  28.         id*: LONGINT;
  29.         type*: LONGINT;
  30.         size*: LONGINT;
  31.         scan*: LONGINT
  32.     END;
  33.     StoredPropertyPtr*= POINTER TO StoredProperty;
  34.     StoredProperty*= RECORD
  35.         size*: LONGINT;
  36.         data*: LONGINT
  37.     END;
  38.     IOClipReqPtr*= POINTER TO IOClipReq;
  39.     IOClipReq*= RECORD
  40.         device*: E.DevicePtr;
  41.         unit*: LONGINT;
  42.         command*: INTEGER;
  43.         flags*: SHORTINT;
  44.         error*: SHORTINT;
  45.         actual*: LONGINT;
  46.         length*: LONGINT;
  47.         data*: LONGINT;
  48.         offset*: LONGINT;
  49.         clipID*: LONGINT
  50.     END;
  51.     ClipboardHandlePtr*= POINTER TO ClipboardHandle;
  52.     ClipboardHandle*= RECORD
  53.         cbport*: E.MsgPort;
  54.         satisfyPort*: E.MsgPort
  55.     END;
  56.     CollectionItemPtr*= POINTER TO CollectionItem;
  57.     CollectionItem*= RECORD
  58.         next*: CollectionItemPtr;
  59.         size*: LONGINT;
  60.         data*: LONGINT
  61.     END;
  62. PROCEDURE -ReturnD0    04EH,05EH,  04EH,075H;
  63. PROCEDURE AllocIFF*(): IFFHandlePtr;
  64. BEGIN
  65.     SYSTEM.CALL( -30, iffparseBase );
  66.     ReturnD0
  67. END AllocIFF;
  68. PROCEDURE OpenIFF*(iff: IFFHandlePtr; modes: SET): LONGINT;
  69. BEGIN
  70.     SYSTEM.PUTREG( 8, iff );
  71.     SYSTEM.PUTREG( 0, modes );
  72.     SYSTEM.CALL( -36, iffparseBase );
  73.     ReturnD0
  74. END OpenIFF;
  75. PROCEDURE ParseIFF*(iff: IFFHandlePtr; control: LONGINT): LONGINT;
  76. BEGIN
  77.     SYSTEM.PUTREG( 8, iff );
  78.     SYSTEM.PUTREG( 0, control );
  79.     SYSTEM.CALL( -42, iffparseBase );
  80.     ReturnD0
  81. END ParseIFF;
  82. PROCEDURE CloseIFF*(iff: IFFHandlePtr);
  83. BEGIN
  84.     SYSTEM.PUTREG( 8, iff );
  85.     SYSTEM.CALL( -48, iffparseBase )
  86. END CloseIFF;
  87. PROCEDURE FreeIFF*(iff: IFFHandlePtr);
  88. BEGIN
  89.     SYSTEM.PUTREG( 8, iff );
  90.     SYSTEM.CALL( -54, iffparseBase )
  91. END FreeIFF;
  92. PROCEDURE ReadChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT;
  93. BEGIN
  94.     SYSTEM.PUTREG( 8, iff );
  95.     SYSTEM.PUTREG( 9, buf );
  96.     SYSTEM.PUTREG( 0, num );
  97.     SYSTEM.CALL( -60, iffparseBase );
  98.     ReturnD0
  99. END ReadChunkBytes;
  100. PROCEDURE WriteChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT;
  101. BEGIN
  102.     SYSTEM.PUTREG( 8, iff );
  103.     SYSTEM.PUTREG( 9, buf );
  104.     SYSTEM.PUTREG( 0, num );
  105.     SYSTEM.CALL( -66, iffparseBase );
  106.     ReturnD0
  107. END WriteChunkBytes;
  108. PROCEDURE PushChunk*(iff: IFFHandlePtr; type, id, size: LONGINT): LONGINT;
  109. BEGIN
  110.     SYSTEM.PUTREG( 8, iff );
  111.     SYSTEM.PUTREG( 0, type );
  112.     SYSTEM.PUTREG( 1, id );
  113.     SYSTEM.PUTREG( 2, size );
  114.     SYSTEM.CALL( -84, iffparseBase );
  115.     ReturnD0
  116. END PushChunk;
  117. PROCEDURE PopChunk*(iff: IFFHandlePtr): LONGINT;
  118. BEGIN
  119.     SYSTEM.PUTREG( 8, iff );
  120.     SYSTEM.CALL( -90, iffparseBase );
  121.     ReturnD0
  122. END PopChunk;
  123. PROCEDURE PropChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
  124. BEGIN
  125.     SYSTEM.PUTREG( 8, iff );
  126.     SYSTEM.PUTREG( 0, type );
  127.     SYSTEM.PUTREG( 1, id );
  128.     SYSTEM.CALL( -114, iffparseBase );
  129.     ReturnD0
  130. END PropChunk;
  131. PROCEDURE StopChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
  132. BEGIN
  133.     SYSTEM.PUTREG( 8, iff );
  134.     SYSTEM.PUTREG( 0, type );
  135.     SYSTEM.PUTREG( 1, id );
  136.     SYSTEM.CALL( -126, iffparseBase );
  137.     ReturnD0
  138. END StopChunk;
  139. PROCEDURE CollectionChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
  140. BEGIN
  141.     SYSTEM.PUTREG( 8, iff );
  142.     SYSTEM.PUTREG( 0, type );
  143.     SYSTEM.PUTREG( 1, id );
  144.     SYSTEM.CALL( -138, iffparseBase );
  145.     ReturnD0
  146. END CollectionChunk;
  147. PROCEDURE FindProp*(iff: IFFHandlePtr; type, id: LONGINT): StoredPropertyPtr;
  148. BEGIN
  149.     SYSTEM.PUTREG( 8, iff );
  150.     SYSTEM.PUTREG( 0, type );
  151.     SYSTEM.PUTREG( 1, id );
  152.     SYSTEM.CALL( -156, iffparseBase );
  153.     ReturnD0
  154. END FindProp;
  155. PROCEDURE FindCollection*(iff: IFFHandlePtr; type, id: LONGINT): CollectionItemPtr;
  156. BEGIN
  157.     SYSTEM.PUTREG( 8, iff );
  158.     SYSTEM.PUTREG( 0, type );
  159.     SYSTEM.PUTREG( 1, id );
  160.     SYSTEM.CALL( -162, iffparseBase );
  161.     ReturnD0
  162. END FindCollection;
  163. PROCEDURE FindPropContext*(iff: IFFHandlePtr): ContextNodePtr;
  164. BEGIN
  165.     SYSTEM.PUTREG( 8, iff );
  166.     SYSTEM.CALL( -168, iffparseBase );
  167.     ReturnD0
  168. END FindPropContext;
  169. PROCEDURE CurrentChunk*(iff: IFFHandlePtr): ContextNodePtr;
  170. BEGIN
  171.     SYSTEM.PUTREG( 8, iff );
  172.     SYSTEM.CALL( -174, iffparseBase );
  173.     ReturnD0
  174. END CurrentChunk;
  175. PROCEDURE ParentChunk*(contextNode: ContextNodePtr): ContextNodePtr;
  176. BEGIN
  177.     SYSTEM.PUTREG( 8, contextNode );
  178.     SYSTEM.CALL( -180, iffparseBase );
  179.     ReturnD0
  180. END ParentChunk;
  181. PROCEDURE InitIFFasDOS*(iff: IFFHandlePtr);
  182. BEGIN
  183.     SYSTEM.PUTREG( 8, iff );
  184.     SYSTEM.CALL( -234, iffparseBase )
  185. END InitIFFasDOS;
  186. PROCEDURE InitIFFasClip*(iff: IFFHandlePtr);
  187. BEGIN
  188.     SYSTEM.PUTREG( 8, iff );
  189.     SYSTEM.CALL( -240, iffparseBase )
  190. END InitIFFasClip;
  191. PROCEDURE OpenClipboard*(unit: LONGINT): ClipboardHandlePtr;
  192. BEGIN
  193.     SYSTEM.PUTREG( 0, unit );
  194.     SYSTEM.CALL( -246, iffparseBase );
  195.     ReturnD0
  196. END OpenClipboard;
  197. PROCEDURE CloseClipboard*(clipHan: ClipboardHandlePtr);
  198. BEGIN
  199.     SYSTEM.PUTREG( 8, clipHan );
  200.     SYSTEM.CALL( -252, iffparseBase )
  201. END CloseClipboard;
  202. PROCEDURE Init;
  203. TYPE LibraryPtr=POINTER TO E.Library;
  204. VAR lib:LibraryPtr;
  205. BEGIN
  206.     iffparseBase:=E.OpenLibrary(iffparseName,37);
  207.     IF iffparseBase=0 THEN HALT(99) END;
  208.     lib:=SYSTEM.VAL(LibraryPtr,iffparseBase);
  209.     iffparseVersion:=lib.version
  210. END Init;
  211. PROCEDURE Term;
  212. BEGIN
  213.     E.CloseLibrary( iffparseBase )
  214. END Term;
  215. BEGIN
  216.     Init;
  217.     E.Register(termEntry, Term);
  218. END AmigaIFFParse.
  219.